#pragma once

#include "Common.h"

class ThreadCache
{
public:
	void* Allocate(size_t size);

	void Deallocate(void* ptr, size_t size);

	void* FetchFromCentralCache(size_t index, size_t size);

	void ListTooLong(FreeList& list, size_t size);

private:
	FreeList _freelists[NFREELIST];
};



// 因为每一个线程都需要一个ThreadCache，主线程需要维护一个数据结构维护对应的ThreadCache对象，
// 这样在创建的时候就需要考虑线程安全，需要加锁，为了提高效率，使用TLS给每一个线程一个ptr指向ThreadCache对象


// TLS（thread local store）线程本地存储，线程创建之前就会生成这样的静态全局变量
#ifdef WIN32
static _declspec(thread) ThreadCache* pTLSThreadCache = nullptr;
#else
static thread_local ThreadCache* pTLSThreadCache = nullptr;
#endif
